import 'package:flutter/material.dart';
import 'package:flutter_boost/flutter_boost.dart'; // Flutter Boost用于原生和Flutter混合开发
import 'package:flutter_harmony_order/pages/order/order_page.dart'; // 导入订单页面

// 1. 创建一个自定义的Binding，继承和with的关系如下，里面什么都不用写
// 这个绑定类是Flutter Boost必需的，用于管理应用生命周期
class CustomFlutterBinding extends WidgetsFlutterBinding
    with BoostFlutterBinding {}

void main() {
  // 2. 这里的CustomFlutterBinding调用务必不可缺少，用于控制Boost状态的resume和pause
  // 初始化自定义绑定，确保Flutter Boost可以正确处理应用生命周期事件
  CustomFlutterBinding();
  // 启动应用
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 3. 路由表
  // 定义应用中所有可导航页面的映射，关联路由名称与对应的页面构建器
  Map<String, FlutterBoostRouteFactory> routerMap = {
    '/OrderDetail': (settings, isContainerPage, uniqueId) {
      return MaterialPageRoute(
        settings: settings,
        builder: (BuildContext ctx) {
          // 返回订单详情页面
          return const OrderPage();
        },
      );
    }
  };

  // 路由工厂函数
  // 根据路由设置创建对应的Route对象
  Route<dynamic> routeFactory(
      RouteSettings settings, bool isContainerPage, String? uniqueId) {
    // 查找路由表中是否存在对应的路由构建器
    FlutterBoostRouteFactory? fn = routerMap[settings.name];
    if (fn == null) {
      // 如果找不到对应的路由，抛出错误
      throw FlutterError(
          'Route "${settings.toString()}" is not defined in routerMap.');
    }
    // 调用路由构建器创建Route对象
    return fn(settings, isContainerPage, uniqueId)!;
  }

  @override
  Widget build(BuildContext context) {
    // flutter_boost 接管应用导航
    return FlutterBoostApp(
      routeFactory, // 传入自定义的路由工厂函数
      // Flutter 侧直接预览需要，需要使用 Deveco Studio 导入 .ohos 项目进行自动签名预览至鸿蒙设备
      initialRoute: '/OrderDetail', // 设置初始路由为订单详情页
      appBuilder: (home) {
        // 使用MaterialApp包装FlutterBoostApp，提供Material Design样式
        return MaterialApp(
          builder: (context, child) => home,
        );
      },
    );
  }
}
